<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> 
<html><head> 
  <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
  <title>如何操作Cookie (web.py)</title> 
  <link rel="stylesheet" type="text/css" href="/static/webpy-new.css"/> 
  <link rel="SHORTCUT ICON" href="/static/favicon.ico"/> 
</head><body> 
 
        <div id="header"><table class="header"><tr>
                <td class="logo"><a href="/" title="Home"><img src="/static/webpy.gif" alt="" /></a></td> 
<td class="blurb">&ldquo;Think about the ideal way to write a web app.<br />Write the code to make it happen.&rdquo; [<a href="/philosophy">more...</a>]</td> </tr>
</table>
        </div> 
        <div id="location"> 
                <a href="/">home</a> &gt; 如何操作Cookie
        </div> 
<div id="container"> 
<div id="sidebar">
<strong>get started:</strong>
<ul class="body">
  <li><a href="/install">install</a></li>
  <li><a href="/docs/0.3/tutorial">tutorial</a></li>
</ul>
<strong>learn more:</strong>
<ul class="body">
<li><a href="/docs/0.3/api">api reference</a></li>
<li><a href="/cookbook/">cookbook</a></li>
<li><a href="/src/">code examples</a></li>
</ul>

<strong>dive in:</strong>
<ul class="body"> 
<li><a href="https://github.com/webpy/webpy">source code</a></li>
<li><a href="http://groups.google.com/group/webpy/">mailing list</a></li>
<li><a href="https://github.com/webpy/webpy/issues">issue tracker</a></li>
</ul>
</div>

<div id="main"> 
<div id="content" class="body"> 
<h1>如何操作Cookie</h1>

<h2>问题</h2>

<p>如何设置和获取用户的Cookie?</p>

<h2>解法</h2>

<p>对web.py而言，设置/获取Cookie非常方便。</p>

<h3>设置Cookies</h3>

<h4>概述</h4>

<pre><code>setcookie(name, value, expires="", domain=None, secure=False): 
</code></pre>

<ul>
<li><em>name</em> <code>(string)</code> - Cookie的名称，由浏览器保存并发送至服务器。</li>
<li><em>value</em> <code>(string)</code> -Cookie的值，与Cookie的名称相对应。</li>
<li><em>expires</em> <code>(int)</code> - Cookie的过期时间，这是个可选参数，它决定cookie有效时间是多久。以秒为单位。它必须是一个整数，而绝不能是字符串。</li>
<li><em>domain</em> <code>(string)</code> - Cookie的有效域－在该域内cookie才是有效的。一般情况下，要在某站点内可用，该参数值该写做站点的域（比如.webpy.org），而不是站主的主机名（比如wiki.webpy.org）</li>
<li><em>secure</em> <code>(bool)</code>- 如果为True，要求该Cookie只能通过HTTPS传输。.</li>
</ul>


<h4>示例</h4>

<p>用<code>web.setcookie()</code> 设置cookie,如下:</p>

<pre><code>class CookieSet:
    def GET(self):
        i = web.input(age='25')
        web.setcookie('age', i.age, 3600)
        return "Age set in your cookie"
</code></pre>

<p>用 GET方式调用上面的类将设置一个名为age,默认值是25的cookie(实际上，默认值25是在web.input中赋予i.age的，从而间接赋予 cookie，而不是在setcookie函式中直接赋予cookie的)。这个cookie将在一小时后(即3600秒)过期。</p>

<p><code>web.setcookie()</code>的第三个参数－"expires"是一个可选参数，它用来设定cookie过期的时间。如果是负数，cookie将立刻过期。如果是正数，就表示cookie的有效时间是多久，以秒为单位。如果该参数为空，cookie就永不过期。</p>

<h3>获得Cookies</h3>

<h4>概述</h4>

<p>获取Cookie的值有很多方法，它们的区别就在于找不到cookie时如何处理。</p>

<h5>方法1（如果找不到cookie，就返回None）：</h5>

<pre><code>web.cookies().get(cookieName)  
    #cookieName is the name of the cookie submitted by the browser
</code></pre>

<h5>方法2（如果找不到cookie，就抛出AttributeError异常）：</h5>

<pre><code>foo = web.cookies()
foo.cookieName
</code></pre>

<h5>方法3（如果找不到cookie，可以设置默认值来避免抛出异常）：</h5>

<pre><code>foo = web.cookies(cookieName=defaultValue)
foo.cookieName   # return the value (which could be default)
    #cookieName is the name of the cookie submitted by the browser
</code></pre>

<h4>示例：</h4>

<p>用<code>web.cookies()</code> 访问cookie.  如果已经用<code>web.setcookie()</code>设置了Cookie, 就可以象下面这样获得Cookie:</p>

<pre><code>class CookieGet:
    def GET(self):
        c = web.cookies(age="25")
        return "Your age is: " + c.age
</code></pre>

<p>这个例子为cookie设置了默认值。这么做的原因是在访问时，若cookie不存在，web.cookies()就会抛出异常，如果事先设置了默认值就不会出现这种情况。</p>

<p>如果要确认cookie值是否存在，可以这样做：</p>

<pre><code>class CookieGet:
    def GET(self):
        try: 
             return "Your age is: " + web.cookies().age
        except:
             # Do whatever handling you need to, etc. here.
             return "Cookie does not exist."
</code></pre>

<p>或</p>

<pre><code>class CookieGet:
    def GET(self):
        age=web.cookies().get(age)
        if age:
            return "Your age is: %s" % age
        else:
            return "Cookie does not exist."
</code></pre>

<div style="clear: both;"></div> 
 
</div> 
 
</div> 
</div>
        <div id="footer"> 
    <p>started by <a style="color: gray;" href="http://www.aaronsw.com/">Aaron Swartz</a> (<a style="color: black;" href="mailto:webpy@aaronsw.com">webpy@aaronsw.com</a>)</p>

<p><a href="https://github.com/webpy/webpy.github.com/blob/master/cookbook/cookies.zh-cn.md">fork this page on GitHub</a></p>
</div> 
 
</body> 
</html> 
